<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>取随机个数的随机数字</title>
	</head>
	<body>
		<script type="text/javascript">

			function GetRandomNumberArray(O_O){
				// 初始定义
				var start = O_O.start || 0; // 起始值
				var step  = O_O.step  || 1; // 步长
				var end   = O_O.end   || 9; // 结束值
				var count = O_O.count || 1; // 个数

				// 辅助对象
				var strObj = {start:'起始值',step:'步长',end:'结束值',count:'个数'}; // 翻译对象
				var numObj = {start:start,step:step,end:end,count:count}; // 循环对象
				var numArr = []; // 生成数字数组

				// 类型判断
				for(var i in numObj){
					if(typeof(numObj[i]) !== 'number'){
						return i + ' [' + strObj[i] + ']-不是数字类型';
					}
				}

				// 整型判断
				for(var i in numObj){
					if(!Number.isInteger(numObj[i])){
						return i + ' [' + strObj[i] + ']-不是整型';
					}
				}

				// 起始值-结束值 合法性判断
				if(start > end){
					return '起始值不能大于结束值';
				}

				// 生成数字数组
				for(var i = start;i <= end;i += step){
					numArr.push(i);
				}

				// 数字数组当前索引
				var currentIndex = numArr.length;

				// 从后往前依次随机改变数组的位置
				while(currentIndex--){
					// 随机索引
					var randomIndex = Math.floor(Math.random() * currentIndex);
					// 暂存当前索引的值
					var tempValue = numArr[currentIndex];
					// 将随机索引的值覆盖当前索引的值
					numArr[currentIndex] = numArr[randomIndex];
					// 将暂存的当前索引值覆盖随机索引值
					numArr[randomIndex] = tempValue;
				}
				// 返回对应长度的打乱后的新数组
				return numArr.slice(0,count);
			}

			// 使用方法
			/*
			   传入一个对象，有下列属性
			   名称  默认值  说明
			   start   [0] : 要生成的数字序列的起始值
			   step    [1] : 要生成的数字序列的步长( 两两之间相隔的大小 )
			   end     [9] : 要生成的数字序列的结束值
			   count   [1] : 要获得多少个随机的序列值
			*/
			var result = GetRandomNumberArray({start:1,step:7,end:80,count:3});
			console.dir(result);
			var result2 = GetRandomNumberArray({start:false,step:false,end:false,count:false}); // 值为false，则表示使用默认值
			console.dir(result2);
			var result3 = GetRandomNumberArray({start:false,step:false,end:59,count:5}); // 值为false，则表示使用默认值
			console.dir(result3);
		</script>
	</body>
</html>